package com.doublethread.easymart.modules.comment.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.doublethread.easymart.common.result.PageResult;
import com.doublethread.easymart.modules.comment.dto.*;
import com.doublethread.easymart.modules.comment.entity.ProductComment;
import com.doublethread.easymart.modules.comment.vo.AdminCommentVO;
import com.doublethread.easymart.modules.comment.vo.CommentStatisticsVO;
import com.doublethread.easymart.modules.comment.vo.CommentVO;

import java.util.List;
import java.util.Map;

/**
 * 商品评价服务接口
 */
public interface CommentService extends IService<ProductComment> {

    /**
     * 获取商品评价列表
     */
    Page<CommentVO> getProductComments(Long productId, CommentQueryDTO queryDTO);

    /**
     * 创建商品评价
     */
    void createComment(Long userId, CommentCreateDTO commentCreateDTO);

    /**
     * 获取用户评价列表
     */
    Page<CommentVO> getUserComments(Long userId, CommentQueryDTO queryDTO);

    /**
     * 删除评价
     */
    void deleteComment(Long userId, Long commentId);

    /**
     * 获取评论列表
     */
    PageResult<AdminCommentVO> getAdminCommentList(CommentQueryDTO queryDTO);

    /**
     * 获取评论详情
     */
    AdminCommentVO getAdminCommentDetail(Long commentId);

    /**
     * 更新评论状态
     */
    void updateCommentStatus(Long commentId, CommentUpdateStatusDTO dto);

    /**
     * 回复评论
     */
    void replyComment(Long commentId, CommentReplyDTO dto);

    /**
     * 批量更新评论状态
     */
    void batchUpdateCommentStatus(CommentBatchUpdateStatusDTO dto);

    /**
     * 批量删除评论
     */
    void batchDeleteComments(List<Long> commentIds);

    /**
     * 获取评论统计信息
     */
    CommentStatisticsVO getAdminCommentStatistics();

    /**
     * 获取商品评论统计信息
     */
    CommentStatisticsVO getAdminProductCommentStatistics(Long productId);

    /**
     * 获取商品评价统计
     */
    CommentStatisticsVO getCommentStatistics(Long productId);

    /**
     * 检查用户是否已评论某商品
     */
    boolean checkUserCommented(Long userId, Long productId);

    /**
     * 获取订单中商品的评论状态
     */
    Map<Long, Boolean> getOrderItemsCommentStatus(Long userId, Long orderId);
}
